import pandas as pdimport numpy as npimport matplotlib.pyplot as plt%matplotlib inlineimport seaborn as snssns.set(style="whitegrid")import osimport glob as gbimport cv2import tensorflow as tfimport kerasxxxxxxxxxxtrainpath='D://Level_3//Second_Term//Selected_2//datasets//dataset_2//Face Images//'testpath='D://Level_3//Second_Term//Selected_2//datasets//dataset_2//Face Images//'xxxxxxxxxxfor folder in os.listdir(trainpath + 'Final Training Images') : files = gb.glob(pathname= str( trainpath +'Final Training Images//' + folder + '/*.jpg')) print(f'For training data , found {len(files)} in folder {folder}')xxxxxxxxxxfor folder in os.listdir(testpath + 'Final Testing Images') : files = gb.glob(pathname= str( testpath +'Final Testing Images//' + folder + '/*.jpg')) print(f'For testing data , found {len(files)} in folder {folder}')xxxxxxxxxxsize = []for folder in os.listdir(trainpath + 'Final Training Images') : files = gb.glob(pathname= str( trainpath +'Final Training Images//' + folder + '/*.jpg')) for file in files: image = plt.imread(file) size.append(image.shape)pd.Series(size).value_counts() # num of same valuesxxxxxxxxxxsize = []for folder in os.listdir(testpath + 'Final Testing Images') : files = gb.glob(pathname= str( testpath +'Final Testing Images//' + folder + '/*.jpg')) for file in files: image = plt.imread(file) size.append(image.shape)pd.Series(size).value_counts() # num of same valuesxxxxxxxxxxcode = {'face1':0 ,'face10':1,'face11':2,'face12':3,'face13':4,'face14':5,'face15': 6,'face16': 7,'face2': 8,'face3': 9,'face4': 10,'face5': 11,'face6': 12,'face7': 13,'face8': 14,'face9': 15}def getcode(n) : # n is the input for x , y in code.items() : if n == y : return x xxxxxxxxxxs=100X_train = []y_train = []for folder in os.listdir(trainpath +'Final Training Images') : files = gb.glob(pathname= str( trainpath +'Final Training Images//' + folder + '/*.jpg')) for file in files: image = cv2.imread(file) image_array = cv2.resize(image , (s,s)) X_train.append(list(image_array)) y_train.append(code[folder])xxxxxxxxxxprint(f'we have {len(X_train)} items in X_train')xxxxxxxxxxplt.figure(figsize=(20,20))for n , i in enumerate(list(np.random.randint(0,len(X_train),36))) : plt.subplot(6,6,n+1) plt.imshow(X_train[i]) plt.axis('off') plt.title(getcode(y_train[i]))xxxxxxxxxxX_test = []y_test = []for folder in os.listdir(testpath +'Final Testing Images') : files = gb.glob(pathname= str(testpath + 'Final Testing Images//' + folder + '/*.jpg')) for file in files: image = cv2.imread(file) image_array = cv2.resize(image , (s,s)) X_test.append(list(image_array)) y_test.append(code[folder])xxxxxxxxxxprint(f'we have {len(X_test)} items in X_test')xxxxxxxxxxplt.figure(figsize=(20,20))for n , i in enumerate(list(np.random.randint(0,len(X_test),36))) : plt.subplot(6,6,n+1) plt.imshow(X_test[i]) plt.axis('off') plt.title(getcode(y_test[i]))xxxxxxxxxxX_train = np.array(X_train)X_test = np.array(X_test)y_train = np.array(y_train)y_test = np.array(y_test)print(f'X_train shape is {X_train.shape}')print(f'X_test shape is {X_test.shape}')print(f'y_train shape is {y_train.shape}')print(f'y_test shape is {y_test.shape}')xxxxxxxxxxfrom keras.layers import DenseKerasModel = keras.models.Sequential([ keras.layers.Conv2D(32,kernel_size=(5,5),activation='relu',input_shape=(s,s,3)), keras.layers.MaxPool2D(2,2), keras.layers.Conv2D(s,kernel_size=(5,5), strides=(1,1), activation='relu'), keras.layers.MaxPool2D(2,2), keras.layers.Flatten() , keras.layers.Dense(s, activation='relu'), keras.layers.Dense(16,activation='softmax') , ])xxxxxxxxxxKerasModel.compile(optimizer ='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])xxxxxxxxxxprint('Model Details are : ')print(KerasModel.summary())xxxxxxxxxxepochs = 10ThisModel = KerasModel.fit(X_train, y_train, epochs=epochs,verbose=1, validation_steps=10)xxxxxxxxxxModelLoss, ModelAccuracy = KerasModel.evaluate(X_test, y_test)print('Test Loss is {}'.format(ModelLoss))print('Test Accuracy is {}'.format(ModelAccuracy ))xxxxxxxxxx# summarize history for accuracyplt.plot(ThisModel.history['accuracy'])plt.title('model accuracy')plt.ylabel('accuracy')plt.xlabel('epoch')plt.legend(['Train', 'Validation'], loc='upper left')plt.show()xxxxxxxxxx# summarize history for lossplt.plot(ThisModel.history['loss'])plt.title('model loss')plt.ylabel('loss')plt.xlabel('epoch')plt.legend(['Train', 'Validation'], loc='upper left')plt.show()xxxxxxxxxx